// dbOperation
// 数据库操作单元

package main

import (
	mgo "gopkg.in/mgo.v2"
)

const (
	CollectionCustomers string = "customers"
)

// Token超期时间
const TokenExpire int64 = 24 * 60 * 60

// DBOperation 数据库操作类
type DBOperation struct {
	session *mgo.Session
	dbName  string
}

// NewDBOperation 构造函数
func NewDBOperation(cfg *Config) (*DBOperation, error) {
	zLog("数据库连接::", cfg.DBUrl, " 开始")
	session, err := mgo.Dial(cfg.DBUrl)
	if err != nil {
		zLog("数据库连接失败::", err.Error())
		return nil, err
	}
	if cfg.DBUser != "" && cfg.DBPwd != "" {
		err = session.Login(&mgo.Credential{
			Username: cfg.DBUser,
			Password: cfg.DBPwd,
		})
		if err != nil {
			zLog("数据库登录失败::", err.Error())
			return nil, err
		}
	}
	//session.SetMode(mgo.Eventual) //该模式最大的特点就是不会缓存连接
	session.SetPoolLimit(100) //设置连接缓冲池的最大值

	dbo := DBOperation{session, cfg.DBName}

	return &dbo, nil
}

// Close 关闭数据库链接
func (p *DBOperation) Close() {
	p.session.Close()
}
